/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package helper;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import model.Matriz;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 *
 * @author ST&T
 */
public class MatrizHelper {

    public static final String NOM_ELEMENTO = "Matriz";

    public static String getDocumento(Matriz objetoVO) {
        Element rootElement = new Element(NOM_ELEMENTO);
        rootElement.addContent(getElemento(objetoVO));
        XMLOutputter salida = new XMLOutputter(Format.getCompactFormat());
        return salida.outputString(new Document(rootElement));
    }

    public static String getDocumento(List coleccionVOs) {
        Element rootElement = new Element(NOM_ELEMENTO);
        for (int i = 0; i < coleccionVOs.size(); i++) {
            Matriz matriz = (Matriz) coleccionVOs.get(i);
            rootElement.addContent(getElemento(matriz));
        }
        XMLOutputter salida = new XMLOutputter(Format.getCompactFormat());
        return salida.outputString(new Document(rootElement));
    }

    public static Element getElemento(Matriz matriz) {
        Element elemento = new Element(NOM_ELEMENTO);

        if (matriz.getMatriz() != null) {

            String datos = "";
            
            for (int i = 0; i < matriz.getMatriz().length; i++) {
                for (int j = 0; j < matriz.getMatriz()[0].length; j++) {
                    datos+= matriz.getMatriz()[i][j]+";";
                }
                datos+=":";
            }

            elemento.setAttribute("datosMatriz", datos);
        }
        return elemento;
    }

    public static Matriz getInstancia(Document documento) {
        return getInstancia(documento.getRootElement().getChild(NOM_ELEMENTO));
    }

    public static Matriz getInstancia(Element elemento) {

        Matriz matriz = new Matriz();

        if (elemento.getAttributeValue("datosMatriz") != null) {
            
            String datosMatriz = elemento.getAttributeValue("datosMatriz");
            
            String [] vMatriz = datosMatriz.split(";:");
            int numeroColumnas = vMatriz[0].split(";").length;
            
            String [][] matrizFinal = new String[vMatriz.length][numeroColumnas];
            
            for (int i = 0; i<vMatriz.length; i++){
                for (int j = 0; j < numeroColumnas; j++){
                    matrizFinal[i][j] = vMatriz[i].split(";")[j];
                }
            }
            
            matriz.setMatriz(matrizFinal);
        }
        
        return matriz;
    }

    public static List getInstancias(String cadenaXmlObjetos) throws Exception {
        try {
            SAXBuilder builder = new SAXBuilder();
            Document documento = builder.build(new StringReader(cadenaXmlObjetos));
            return getInstancias(documento);
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public static List getInstancias(Document documento) {
        List matrices = new ArrayList();
        List elementos = documento.getRootElement().getChildren(NOM_ELEMENTO);
        for (int i = 0; i < elementos.size(); i++) {
            Element elemento = (Element) elementos.get(i);
            matrices.add(getInstancia(elemento));
        }
        return matrices;
    }
}